import Request from '@/js_sdk/luch-request/index.js';
const http = new Request();
/**
 * @description 修改全局默认配置
 * @param {Function}
 */
http.setConfig((config) => {
    /* config 为默认全局配置*/
    config.baseURL = process.env.NODE_ENV === 'development' ? '' : process.env.VUE_APP_API_HOST; /* 根域名 */
    config.header = {
        platform: 'j',
    };
    config.custom = {
        auth: true,
        loading: true,
        isAbnormal: true,
    };
    return config;
});

/**
 * 在请求之前拦截
 */
http.interceptors.request.use(
    (config) => {

        if (config.custom.loading) {
            uni.showLoading({
                title: '加载中',
            });
        }

        return config;
    },
    (config) => {
        // 可使用async await 做异步操作
        return Promise.reject(config);
    }
);

/**
 * 在请求之后拦截
 */
http.interceptors.response.use(
    (response) => {
        /* 对响应成功做点什么 可使用async await 做异步操作*/
        if (response.config.custom.loading) {
            uni.hideLoading();
        }
        if (response.statusCode !== 200) {
            // 服务端返回的状态码不等于200，则reject()
            return Promise.reject(response);
        } else {
            return response.data;
        }
    },
    (response) => {
        /*  对响应错误做点什么 （statusCode !== 200）*/
        if (response.config && response.config.custom && response.config.custom.loading) {
            uni.hideLoading();
        }

        // 拿到http状态码;
        if (response.config && response.config.custom && response.config.custom.isAbnormal) {
            let msgInfo = '';
            let msgTitle = '请求错误';
            if (response) {
                if (response.data) {
                    if (typeof response.data === 'string') {
                        msgTitle = response.data;
                    } else if (response.data.desc) {
                        msgTitle = response.data.desc;
                    }
                }
            }

            if ((response && response.status == 400 && !response.data.desc) || (response && response.status == 404)) {
                // 不提示错误
            } else {
                uni.showModal({
                    title: '提示',
                    content: `${msgTitle} ${msgInfo ? '(' + msgInfo + ')' : ''}`,
                    showCancel: false,
                });
            }
        }

        return Promise.reject(response);
    }
);

export default http;
